//
//  WBSQLManager.swift
//  数据库操作
//
//  Created by 韩菲菲 on 16/8/22.
//  Copyright © 2016年 韩菲菲. All rights reserved.
//

import UIKit

//数据库名称
private let dbName = "wbstatus.db"

class WBSQLManager: NSObject {
    
    // MARK: - 实现单例类
    static let sharedManager: WBSQLManager = WBSQLManager()
    
    let queue: FMDatabaseQueue
    
    //重写该类的Init方法
    override init(){
        
        let path = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as NSString).stringByAppendingPathComponent(dbName)
        
        print(path)
        
        //以串行队列的方式操作数据库 路径是数据库文件存放的路径
        //通过数据库文件存放路径实例化一个串行队列 该队列用来操作数据库
        queue = FMDatabaseQueue(path: path)
        
        super.init()
        
        //数据库文件有了 接下来就要创建表了 提供个方法来创建表
        creatTabel()
    
    }
    
    // MARK: - 创建表
    func creatTabel() {
        
        //先写sql语句 获取db.sql中的sql语句 先读取的db.sql文件
        let sqlFile = NSBundle.mainBundle().pathForResource("db.sql", ofType: nil)
        
        //获取文件中的字符串
        let sqlString = try! String(contentsOfFile: sqlFile!)
        
        //执行sql语句 以队列形式执行 获取队列 全局化队列
        queue.inDatabase { (db) in
            
            if db.executeStatements(sqlString) {
                
                print("创建表成功")
            
            }else
            {
                print("创建表失败")
            
            }
        }
    }
    
    //传入一个sql语句 返回查询的结果数组
    func getResultArrayWithSQL(sql: String) -> [[String: AnyObject]] {
        
        //创建一个可变数组
        var resultArrM: [[String: AnyObject]] = [[String: AnyObject]]()
        
        //执行sql语句
        WBSQLManager.sharedManager.queue.inDatabase { (db) in
            
            let result = db.executeQuery(sql, withArgumentsInArray: nil)
            
            //遍历结果集的每一行
            while result.next(){
                
                //遍历每一行中的每一列 每一行是一个字典 创建字典  列数就是字典中有几个键值对
                var tempDict:[String: AnyObject] = [String: AnyObject]()
                
                for i in 0..<result.columnCount(){
                    
                    let key = result.columnNameForIndex(i)
                    let value = result.objectForColumnIndex(i)
                    
                    //添加到字典中  创建字典
                    tempDict[key] = value
                }
                
                //每次遍历完一行 就创建了一个字典 把字典存储到数组中 数组的长度就是查询到的行数
                resultArrM.append(tempDict)
                
            }
            
        }
        
        //数组中存储到的就是查询到的结果  返回数组
        return resultArrM
        
    }
    
    
    
    
    
}
